﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;


// 动画管理类
public class TweenAnimationManager : MonoBehaviour
{
    // 队列（先进先出）
    private Queue<List<AnimData>> animQueue = new Queue<List<AnimData>> ( );

    // 正在动画中？
    bool isTween;

    // 进行动画的数量
    int tweenAnimationCount;

    // 已经结束的动画数量
    int endAnimCount;


    // 添加动画（拼图位置交换的时候）
    public void AddListAnimData(List<AnimData> animData)
    {
        // 一组动画入列
        animQueue.Enqueue(animData);
    }


     // 实行动画的处理
    private void Update ( ) {
        if (isTween) {
            // 已经在动画中了 暂不执行
            return;
        }
        // 如果队列中还有动画
        if (animQueue.Count > 0) {
            // 已经结束的动画数量清零
            endAnimCount = 0;
            // 开始动画
            isTween = true;
            // 出列删除最前面的一条(保持执行顺序)
            var queue = animQueue.Dequeue ( );
            // 动画数量
            tweenAnimationCount = queue.Count;
            foreach (var data in queue) {
                // 遍历所有拥有动画属性的元素，并添加动画
                var tween = data.targetObject.AddComponent<MoveTween> ( );
                // 执行动画（当前位置，目标位置，动画时间）
                tween.DoTween (data.targetObject.transform.position, data.targetPosition, data.duration, ( ) => {
                    // 结束的动画计数
                    endAnimCount++;
                    // 所有的动画都结束了
                    if (tweenAnimationCount == endAnimCount) {
                        // 执行下一次
                        isTween = false;
                    }
                });
            }
        }
    }

}
